from repository.workRepository import get_works, get_works_by_category, get_works_by_parent_category, get_work_by_id, search_works
from utils.response import JsonResponse
from fastapi import APIRouter

router = APIRouter()


@router.get("/listWorks", response_model=JsonResponse)
def read_works(page: int = 1, page_size: int = 9):
    """获取系统中所有作品的完整列表（分页）

    Args:
        page (int): 页码，默认为1
        page_size (int): 每页数量，默认为10
    """
    # 获取所有作品信息（分页）
    works_data = get_works(page, page_size)
    return JsonResponse.success(works_data)


@router.get("/category/{category_id}", response_model=JsonResponse)
def read_works_by_category(category_id: int, page: int = 1, page_size: int = 9):
    """根据分类ID查询该分类下的所有作品（分页）

    Args:
        category_id (int): 分类ID
        page (int): 页码，默认为1
        page_size (int): 每页数量，默认为10
    """
    # 根据分类ID获取作品信息（分页）
    works_data = get_works_by_category(category_id, page, page_size)
    return JsonResponse.success(works_data)


@router.get("/parent-category/{parent_id}", response_model=JsonResponse)
def read_works_by_parent_category(parent_id: int, page: int = 1, page_size: int = 9):
    """根据父分类ID查询该分类下所有子分类的作品（分页）

    Args:
        parent_id (int): 父分类ID
        page (int): 页码，默认为1
        page_size (int): 每页数量，默认为9
    """
    # 根据父分类ID获取所有子分类的作品信息（分页）
    works_data = get_works_by_parent_category(parent_id, page, page_size)
    return JsonResponse.success(works_data)


@router.get("/getWork/{work_id}", response_model=JsonResponse)
def read_work(work_id: int):
    """根据作品ID查询单个作品的详细信息

    Args:
        work_id (int): 作品ID
    """
    # 根据ID获取作品信息
    db_work = get_work_by_id(work_id)
    if db_work is None:
        return JsonResponse.error("作品不存在", 404)
    return JsonResponse.success(db_work)


@router.get("/search", response_model=JsonResponse)
def search_works_by_keyword(keyword: str, page: int = 1, page_size: int = 9):
    """根据关键词搜索作品（分页）

    Args:
        keyword (str): 搜索关键词
        page (int): 页码，默认为1
        page_size (int): 每页数量，默认为10
    """
    # 根据关键词搜索作品信息（分页）
    works_data = search_works(keyword, page, page_size)
    return JsonResponse.success(works_data)